/*
 * @Author: xiaosihan 
 * @Date: 2022-09-27 15:35:00 
 * @Last Modified by: xiaosihan
 * @Last Modified time: 2025-08-23 17:27:19
 */
import { LangType } from "@/types/type";
import utils from "@/utils/utils";

import { makeAutoObservable } from "mobx";
class LangStore {
    constructor() {
        makeAutoObservable(this, {}, { deep: false });
    }

    // 当前语言
    lang = (utils.getStorageSync("lang") || getDefaultLang()) as LangType;
    setLang(name: LangType) {
        utils.setStorageSync("lang", name);
        this.lang = name;
    }

    // 获取多语言
    getMessage(key: keyof typeof this.langJSON) {
        return this.langJSON[key][this.lang];
    }

    // 多语言配置
    langJSON = {
        login: {
            [LangType.CN]: "登录", // 中文
            [LangType.EN]: "Login", //  英文
        },
        add: {
            [LangType.CN]: "新建", // 中文
            [LangType.EN]: "add", //  英文
        },
        save: {
            [LangType.CN]: "保存", // 中文
            [LangType.EN]: "save", //  英文
        },
        search: {
            [LangType.CN]: "搜索",
            [LangType.EN]: "Search",
        },
        cart: {
            [LangType.CN]: "购物车",
            [LangType.EN]: "Cart",
        },
        favorites: {
            [LangType.CN]: "收藏",
            [LangType.EN]: "Favorites",
        },
        buy: {
            [LangType.CN]: "购买",
            [LangType.EN]: "Buy",
        },
        checkout: {
            [LangType.CN]: "结算",
            [LangType.EN]: "Checkout",
        },
    }

}

const langStore = new LangStore();

export default langStore;


// 获取浏览器默认的语言
function getDefaultLang() {
    const e = (navigator.language || "").toLocaleLowerCase();
    // if (/^es/.test(e))
    //     return LangType.ES;
    switch (e) {
        // case "ja":
        //     return LangType.JP;
        case "zh-cn":
        case "zh":
        case "zh-tw":
            return LangType.CN;
        // case "en":
        // case "en-us":
        // case "es":
        //     return LangType.EN;
        // case "pt":
        // case "pt-br":
        // case "pt-pt":
        //     return LangType.PT;
        // case "fr":
        // case "fr-fr":
        // case "fr-ca":
        // case "fr-ch":
        //     return LangType.FR;
        // case "de":
        // case "de-at":
        // case "de-de":
        // case "de-li":
        // case "de-ch":
        //     return LangType.DE;
        // case "ru":
        //     return LangType.RU;
        default:
            return LangType.EN
    }
}